21520
6290
閉まっている。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。
この質問を改善したいですか?この投稿を編集して、詳細を追加し、問題を明確にしてください。
1年前に閉店しました。
この質問を改善する
コードチャレンジを行っていますが、開始インデックスを指定し、開始インデックスから最初の(3または任意の長さの)値のみを取得して、配列から最初の3つの値を取得したいと考えています。
このコードを試してみましたが、機能していますが、コード構造が長すぎるため、これを短くして理解しやすくする方法を教えてください。
int n = 10;
二重署名=新しいdouble [] {1、1、1};
double [] ret = new double [n];
二重和= 0;
ret [0] =署名[0];
ret [1] =署名[1];
ret [2] =署名[2];
int x、i;
for(i = 0; i 
                                
LINQを使用すると、次のようなことを試すことができます。
var values = array.Skip(index)
.Take(n)
.ToArray();
ここで、indexは最初のアイテムのインデックスであり、nは選択するアイテムの数です。
例えば。 https://dotnetfiddle.net/Pk1rwY
補足として。 LINQを使用しても、コードが高速になるわけではありません。よりコンパクトで読みやすくなります。コードのパフォーマンスを評価するには、BenchmarkDotNetなどを使用する必要があります。
|
Linqソリューションなし:
private static T [] Extract (T [] source、int fromIndex、int length){
if(null ==ソース)
新しいArgumentNullException(nameof(source));をスローします。
else if(fromIndex <0)
新しいArgumentOutOfRangeException(nameof(fromIndex)、
"インデックスからは負でない必要があります");
else if(長さ<0)
新しいArgumentOutOfRangeException(nameof(length)、
"長さは負でない必要があります");
if(fromIndex> = source.Length || length == 0)
新しいT [0]を返します。
T []結果=新しいT [Math.Min(length、source.Length-fromIndex)];
Array.Copy(source、fromIndex、result、0、result.Length);
結果を返します。
}
次に
double []署名=新しいdouble [] {0、1、2、3、4、5};
double [] ret = Extract(signature、3、2);
Console.Write(string.Join( "、"、ret));
結果:
3、4
|
あなたの質問から、あなたは演算子.Takeと.Skipを利用する必要があります。
var result = array.Skip(startingIndex).Take(numberOfElements);
したがって、コードからは、要素の合計など、少し異なることをしようとしているようです。ここでは、.Sum演算子が役立つ場合があります。
|
あなたが探している答えではありませんか? c#arrays linqとタグ付けされた他の質問を参照するか、独自の質問をしてください。